﻿/*************************************************************************************

- CLR版本：        4.0.30319.42000
- 类 名 称：       TaskEx
- 机器名称：       YTE
- 命名空间：       LD.Common
- 文 件 名：       TaskEx
- 创建时间：       2022/7/1 8:48:30
- 作    者：       YTE
- 说   明：
- 修改时间：
- 修 改 人：
  *************************************************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace LD.Host
{
    public class TaskEx
    {
        private Task m_CurTask;
        private CancellationTokenSource tokenSource;
        private ManualResetEvent resetEvent = new ManualResetEvent(false);
        public void Start(Action<object> action, object param)
        {
            Cancel();
            tokenSource = new CancellationTokenSource();
            CancellationToken token = tokenSource.Token;
            m_CurTask = Task.Run(() =>
            {
                resetEvent.Set();
                while (true)
                {
                    //等待信号
                    resetEvent.WaitOne();
                    //取消
                    if (token.IsCancellationRequested)
                        return;

                    //方法
                    action?.Invoke(param);

                    Task.Delay(10).Wait();
                }

            }, token);
        }
        /// <summary>
        /// 暂停
        /// </summary>
        public void Pause()
        {
            //暂停
            resetEvent.Reset();
        }
        /// <summary>
        /// 继续
        /// </summary>
        public void Reset()
        {
            //继续
            resetEvent.Set();
        }
        /// <summary>
        /// 关闭
        /// </summary>
        public void Cancel()
        {
            tokenSource?.Cancel();
            resetEvent?.Set();
            m_CurTask = null;
        }
    }
}
